/**
 * Created with IntelliJ IDEA.
 * Description:将x减小到0的最少操作次数
 * User: bjc
 * Date: 2025-11-11
 * Time: 19:56
 */
public class Test04_minOperations {

    public static int minOperations(int[] nums, int x) {
        int left = 0, right = 0;
        int ret = -1;
        //1.计算数组的和
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
        }
        //2.滑动窗口
        int target = sum - x;
        if(target < 0) return -1; //如果 target < 0，说明 x > sum，不可能通过移除元素使 x 减到 0,注意，这个条件也保证了下面的left，在while中不会越界
        int tmp = 0;
        while (right < nums.length) {
            tmp += nums[right];
            while (tmp > target) { //不用加限制left<right条件，因为如果加入了这个条件，假如是数组中元素和刚好等于x，这种情况则不能满足
                tmp -= nums[left];
                left++;
            }
            if (tmp == target) {
                ret = Math.max(ret, right - left + 1);
            }
            right++;
        }
        if (ret == -1)
            return -1;
        else
            return nums.length - ret;
    }
}
